Ever since the invention of the integrated circuit in the late 1950's, ICs have become ever more powerful and complex. Intel® Corporation introduced the world's first central processing unit (CPU), the Intel® 4004 microprocessor, comprising 2,300 transistors having a minimum feature size of 10 μm and running at a blazing 108 KHz. In approximate accordance with Moore's law (based on Intel® Corporation co-founder Gordon Moore's 1965 publication predicting the number of transistors on integrated circuits to double every two years), the speed increase has shot upward at a fairly even rate for nearly four decades. In comparison to the 4004 microprocessor, Intel's recently introduced Ivy Bridge processor has 1.4 billion transistors and employs a minimum feature size of 22 nm.
Historically, computer systems typically employed a CPU with a single processor core that was coupled to an Input/Output (I/O) chip or chipset and a memory controller, all of which comprised discreet IC's linked in communication via applicable interconnects. More recently, architectures commonly referred to as “System on a Chip” (SoC), have become prevalent in the industry. Rather than have external interconnects between discreet components, SoCs employ internal interconnects that facilitate communication between embedded components, such as processor cores and various functional blocks and modules supporting functions such as I/O, memory access, peripheral interfaces, video interfaces, etc.
Modern SoC architectures are very complex, and as a result may be more difficult to debug than systems employing discreet IC architectures. Under the traditional approach, the functionality and other testing aspects of the discreet components could be tested on an individual component basis. While there are some aspects of debug testing on SoCs that enable embedded blocks or subsystems to be isolated, other tests are preferably implemented by collecting various debug data from multiple blocks and modules concurrently. As the clock rates and complexity of SoCs increase, concurrent debug testing of multiple blocks and modules has likewise grown more complex.